/*
 * ColaBloqueante.h
 *
 *  Esta cola tiene la novedad de que es thread safe. Es decir, se protege a si
 *  misma de que mas de un hilo actue sobre ella simultaneamente
 */

#ifndef COLABLOQUEANTE_H_
#define COLABLOQUEANTE_H_

#include <queue>
#include <iostream>
#include "Lock.h"

template <class T>
class ColaBloqueante {
	std::queue<T> cola;
	Mutex mutex;

	public:
		ColaBloqueante<T>();
		virtual ~ColaBloqueante<T>();

		// Devuelve el elemento correspondiente y lo elimina de la pila
		T pop();
		void push(const T elem);
		bool vacia();
};

#endif
